home *** CD-ROM | disk | FTP | other *** search
- #ifndef COMPILERSPECIFIC_H
- #define COMPILERSPECIFIC_H
- /*
- ** $VER: CompilerSpecific.h 2.2 (1.10.97)
- **
- ** Copyright (C) 1997 Bernardo Innocenti. All rights reserved.
- **
- ** Compiler specific definitions is here. You can add support
- ** for other compilers in this header. Please return any changes
- ** you make to me, so I can add them to my personal copy of this file.
- **
- ** Here is a short description of the macros defined below:
- **
- ** LIBCALL
- ** Shared library entry point, with register args
- **
- ** HOOKCALL
- ** Hook or boopsi dispatcher entry point with arguments
- ** passed in registers
- **
- ** INLINE
- ** Please put function body inline to the calling code
- **
- ** STDARGS
- ** Function uses standard C conventions for arguments
- **
- ** ASMCALL
- ** Function takes arguments in the specified 68K registers
- **
- ** REGCALL
- ** Function takes arguments in registers choosen by the compiler
- **
- ** CONSTCALL
- ** Function does not modify any global variable
- **
- ** FORMATCALL(archetype,string_index,first_to_check)
- ** Function uses printf or scanf-like formatting
- **
- ** SAVEDS
- ** Function needs to reload context for small data model
- **
- ** INTERRUPT
- ** Function will be called from within an interrupt
- **
- ** NORETURN
- ** Function does never return
- **
- ** ALIGNED
- ** Variable must be aligned to longword boundaries
- **
- ** CHIP
- ** Variable must be stored in CHIP RAM
- **
- ** REG(reg,arg)
- ** Put argument <arg> in 68K register <reg>
- **
- ** min(a,b)
- ** Return the minimum between <a> and <b>
- **
- ** max(a,b)
- ** Return the maximum between <a> and <b>
- **
- ** abs(a)
- ** Return the absolute value of <a>
- **
- ** _COMPILED_WITH
- ** A string containing the name of the compiler
- */
-
- #ifdef __SASC
- /* SAS/C 6.58 or better */
-
- #define INLINE static __inline
- #define STDARGS __stdargs
- #define ASMCALL __asm
- #define REGCALL __regcall
- #define CONSTCALL /* unsupported */
- #define FORMATCALL /* unsupported */
- #define SAVEDS __saveds
- #define INTERRUPT __interrupt
- #define NORETURN /* unsupported */
- #define ALIGNED __aligned
- #define CHIP __chip
- #define REG(reg,arg) register __##reg arg
- #define _COMPILED_WITH "SAS/C"
-
- /* For min(), max() and abs() */
- #ifndef USE_BUILTIN_MATH
- #define USE_BUILTIN_MATH
- #endif
- #include <string.h>
- #else
- #ifdef __GNUC__
- /* GeekGadgets GCC 2.7.2.1 or better */
-
- #define INLINE static __inline
- #define STDARGS __stdargs
- #define ASMCALL /* nothing */
- #define REGCALL /* nothing */
- #define CONSTCALL __attribute__((const))
- #define FORMATCALL(a,s,f) __attribute__((format(a,s,f)))
- #define SAVEDS __attribute__((saveds))
- #define INTERRUPT __attribute__((interrupt))
- #define NORETURN __attribute__((noreturn))
- #define ALIGNED __attribute__((aligned(4)))
- #define REG(reg,arg) arg __asm(#reg)
- #define _COMPILED_WITH "GCC"
-
- #define min(a,b) (((a)<(b))?(a):(b))
- #define max(a,b) (((a)>(b))?(a):(b))
- #define abs(a) (((a)>0)?(a):-(a))
-
- /* GCC produces code which calls these two functions
- * to initialize and copy structures and arrays.
- */
- void INLINE STDARGS bzero (char *buf, int len)
- { while (len--) *buf++ = 0; }
-
- void INLINE STDARGS bcopy (char *src, char *dest, int len)
- { while (len--) *dest++ = *src++; }
-
- #else
- #ifdef __STORM__
- /* StormC 2.00.23 or better */
- #define INLINE __inline
- #define STDARGS /* nothing */
- #define ASMCALL /* nothing */
- #define REGCALL register
- #define CONSTCALL /* unsupported */
- #define FORMATCALL /* unsupported */
- #define SAVEDS __saveds
- #define INTERRUPT __interrupt
- #define NORETURN /* unsupported */
- #define ALIGNED /* unsupported */
- #define CHIP __chip
- #define REG(reg,arg) register __##reg arg
- #define _COMPILED_WITH "StormC"
-
- #define min(a,b) (((a)<(b))?(a):(b))
- #define max(a,b) (((a)>(b))?(a):(b))
- #define abs(a) (((a)>0)?(a):-(a))
-
- #define _INLINE_INCLUDES
- #include <string.h>
- #else
- #ifdef __MAXON__
- /* Maxon C/C++ */
-
- #define INLINE static inline
- #define STDARGS /* ? */
- #define ASMCALL /* ? */
- #define REGCALL /* ? */
- #define CONSTCALL /* unsupported */
- #define FORMATCALL /* unsupported */
- #define SAVEDS __saveds
- #define INTERRUPT __interrupt
- #define NORETURN /* unsupported */
- #define ALIGNED __aligned
- #define REG(reg,arg) register __##reg arg
- #define _COMPILED_WITH "Maxon C"
-
- /* For min(), max() and abs() */
- #define USE_BUILTIN_MATH
- #include <string.h>
-
- #error Maxon C compiler support is untested. Please check all the above definitions
- #else
- #ifdef _DCC
- /* DICE C */
-
- #define INLINE static __inline
- #define STDARGS __stdargs
- #define ASMCALL /* nothing */
- #define REGCALL /* ? */
- #define CONSTCALL /* unsupported */
- #define FORMATCALL /* unsupported */
- #define SAVEDS __geta4
- #define INTERRUPT /* unsupported */
- #define NORETURN /* unsupported */
- #define ALIGNED __aligned
- #define REG(reg,arg) __##reg arg
- #define _COMPILED_WITH "DICE"
-
- #define min(a,b) (((a)<(b))?(a):(b))
- #define max(a,b) (((a)>(b))?(a):(b))
- #define abs(a) (((a)>0)?(a):-(a))
-
- #error DICE compiler support is untested. Please check all the above definitions
- #else
- #ifdef AZTEC_C
- /* Aztec/Manx C */
-
- #define INLINE static
- #define STDARGS /* ? */
- #define ASMCALL /* ? */
- #define REGCALL /* ? */
- #define CONSTCALL /* unsupported */
- #define FORMATCALL /* unsupported */
- #define SAVEDS __geta4
- #define INTERRUPT /* unsupported */
- #define NORETURN /* unsupported */
- #define ALIGNED __aligned
- #define REG(reg,arg) __##reg arg
- #define _COMPILED_WITH "Manx C"
-
- #define min(a,b) (((a)<(b))?(a):(b))
- #define max(a,b) (((a)>(b))?(a):(b))
- #define abs(a) (((a)>0)?(a):-(a))
-
- #error Aztec/Manx C compiler support is untested. Please check all the above definitions
- #else
- #error Please add compiler specific definitions for your compiler
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
-
-
- /* Special function attributes */
-
- #define ASM ASMCALL
- #define LIBCALL ASMCALL SAVEDS
- #define HOOKCALL ASMCALL SAVEDS
-
-
- /* AROS Compatibility: IPTR is a type which can store a pointer
- * as well as a long integer.
- */
- #ifndef IPTR
- #define IPTR LONG
- #endif /* IPTR */
-
-
-
- #endif /* !COMPILERSPECIFIC_H */
-